You can't really have static class variables in VB6, but you can simulate it. Here's how.
The trick is to use a Public Static Function in a plain old module (not a Class). The function acts as an accessor to its static datum:
Public Static Function AssertTests(newValue As Long, setValue As Boolean) As Long On Error GoTo AssertTests_Error Dim testsValue As Long If setValue Then testsValue = newValue End If AssertTests = testsValue Exit Function AssertTests_Error: Err.Raise Err.Number, Err.Source, "AssertTests: " & Err.Description End Function
AssertTests(newValue, setValue) acts as a gatekeeper to the actual static variable. If you happen to have a way to further control the data access like caller() in Perl:
package main; zoe(); xjoe::joey(); exit(0); sub zoe { my @frame = caller(); print "called from '", $frame[0], "'\n"; } package xjoe; sub joey { joe(); } sub joe { my @frame = caller(); if ($frame[0] ne "joe") { die "Only 'joe' objects can call me, bucky!\n"; } print "called from '", $frame[0], "'\n"; }
then you can block the execution of the gatekeeper from any class except the one that you want. Implementing caller() in VB6 looks possible in debugging code, using the dbghelp.dll API. (VB.NET has better support for caller(), of course, as well as static class variables.)
You can then wrap these gatekeepers in VB6 Properties, so they look like the long-desired static class variables:
Private Property Get Tests() As Long On Error GoTo Get_Tests_Error Tests = AssertTests(0, False) Get_Tests_Exit: Exit Property Get_Tests_Error: Err.Raise Err.Number, Err.Source, "Tests-GET: " & Err.Description End Property Private Property Let Tests(vData As Long) On Error GoTo Let_Tests_Error AssertTests vData, True Let_Tests_Exit: Exit Property Let_Tests_Error: Err.Raise Err.Number, Err.Source, "Tests-LET: " &Err.Description End Property
FWIW, VB6 static class variables are part of trying to develop VB6Unit, an Open Source VSTS-compatible unit testing framework for VB6. I make no promises about when, if ever, VB6Unit actually sees the light of day.